﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Seguridad.ControlExeption;
using Crosland.Automotriz.Facade.Facade;
using System.Configuration;
using System.Net.Mail;
using Crosland.Automotriz.Logic;
using DevExpress.Web.ASPxGridView;
using Crosland.Automotriz.Core;
using Microsoft.Reporting.WebForms;
using System.Security.Principal;
using System.Net;
using DevExpress.Web.ASPxEditors;
using System.Drawing;
namespace Crosland.Automotriz.Web.canibalizacion
{
    public partial class wFrmCanibalizacion : System.Web.UI.Page
    {
        private int intIdNegocio = Convert.ToInt32(ConfigurationManager.AppSettings["Negocio"]);
        private iFacadeCanibalizacion facedeCanibalizacion = null;
        private MailMessage mail = null;
        private static String strMsg, strTitulo;
        protected void Page_Load(object sender, EventArgs e)
        {

            Panel img2 = (Panel)Master.FindControl("pnlTop");
            img2.Visible = false;

            if (Page.IsPostBack == false)
            {
                Panel img = (Panel)Master.FindControl("asp");
                img.Visible = false;
         

                this.ListaEstado();
                this.ListarCab();
                this.ListarCorreo();

                if (Session["boolGrabacion"] != null)
                {
                    strTitulo =(Convert.ToBoolean(Session["boolGrabacion"]) == true) ? "Grabacion Exitosa" : "ERROR";
                    strMsg = Session["strMsg"].ToString();
                    Session["boolGrabacion"] = null;
                    lblmsj.Text = strMsg;
                    popupmsj.HeaderText = strTitulo;
                    popupmsj.ShowOnPageLoad = true;

                }

            }
        }



        private void ListarCorreo()
        {

            facedeCanibalizacion = new FacadeCanibalizacion();
            cboUsuarios.DataSource = facedeCanibalizacion.listarCorreo();
            cboUsuarios.TextField = "NOMBRE_APELLIDOS";
            cboUsuarios.ValueField = "DES_EMAIL";
            cboUsuarios.DataBind();

            cboUsuarios.SelectedIndex = 0;

        }

        private void ListaEstado()
        {
            facedeCanibalizacion = new FacadeCanibalizacion();
            cboEstado.DataSource = facedeCanibalizacion.ListaEstado();
            cboEstado.TextField = "DES_CORTA";
            cboEstado.ValueField = "ID_GENERAL_DET";
            cboEstado.DataBind();

            ListEditItem l = new ListEditItem() { Text = "Todos", Value = "99999" };
            cboEstado.Items.Insert(0, l);
            cboEstado.Value = "153".ToString();

        }

        /*  Listado de canibalización */

        private void ListarCab()
        {
            facedeCanibalizacion = new FacadeCanibalizacion();
            try
            {
                grdCanibalizacionListado.DataSource = facedeCanibalizacion.listarCanibalizacionCab(Convert.ToInt32(cboEstado.Value));
                grdCanibalizacionListado.DataBind();
            }
            catch (Automotriz.Logic.ControlExeption.DataException ex)
            {

                GuardarExceptionLog(ex.Message, ex, "ListarCab");
                MensajesError(ex.Message, ex, "ListarCab");
            }
            catch (Exception ex)
            {

                GuardarExceptionLog(ex.Message, ex, "ListarCab");
                MensajesError(ex.Message, ex, "ListarCab");

            }

        }


        private void Anular()
        {
            PopupMsjConfirmacion.ShowOnPageLoad = false;
            facedeCanibalizacion = new FacadeCanibalizacion();
            bool blResultado = false;
            int intIndex = grdCanibalizacionListado.FocusedRowIndex;

            if (intIndex == -1) {

                lblmsj.Text = "Seleccione un registro";
                popupmsj.ShowOnPageLoad = true;
                return;
            }
            int idCab = Convert.ToInt32(grdCanibalizacionListado.GetRowValues(intIndex, "ID_LOG_CANIBALIZACION_CAB"));
            blResultado = facedeCanibalizacion.ActualizaEstado_LOG_CANIBALIZACION_CAB(149, idCab);

            if (blResultado)
            {
                this.ListarCab();
                lblmsj.Text = "Se anuló correctamente";
                popupmsj.ShowOnPageLoad = true;

            }
        }


        private void SolicitudAprobacion()
        {
            try
            {

                String strMailSession = Session["Correo_user"].ToString();
                String Nro_Chasis = grdCanibalizacionListado.GetRowValues(grdCanibalizacionListado.FocusedRowIndex, "VIN").ToString();
                String htmBody = String.Format(HtmlEmail.EnvioSolitudMotosCanibalizar, cboUsuarios.Text, "Tiene una solicitud Por Aprobar <b> Nro.VIN : " + Nro_Chasis + "</b>", txtObservacion.Text);
                Tools.SendEmail(Convert.ToString(cboUsuarios.Value), strMailSession, "Solicitud de Aprobación Motos a Canibalizar", htmBody);                
               
                PopupCorreo.ShowOnPageLoad = false;
                lblmsj.Text = "Se envió Correctamente la solicitud!";
                popupmsj.ShowOnPageLoad = true;


            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "SolicitudAprobacion");
                MensajesError(ex.Message, ex, "SolicitudAprobacion");

            }
        }

        private void AprobarSolicitud() {

            try
            {
                facedeCanibalizacion = new FacadeCanibalizacion();
                bool blResultado = false;
                int idCab = Convert.ToInt32(grdCanibalizacionListado.GetRowValues(grdCanibalizacionListado.FocusedRowIndex, "ID_LOG_CANIBALIZACION_CAB"));
                blResultado = facedeCanibalizacion.ActualizaEstado_LOG_CANIBALIZACION_CAB(148, idCab);

                if (blResultado)
                {
                    this.ListarCab();
                    lblmsj.Text = "Se Aprobó correctamente";
                    popupmsj.ShowOnPageLoad = true;

                }
            }
            catch (Exception)
            {
                
                throw;
            }
        
        }


        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            Session["Operacion"] = "C";
            Response.Redirect("~/Canibalizacion/wFrmCanibalizacionActualizar.aspx?id=" + intIdNegocio);
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Seguridad/wFrmDefault.aspx?id=" + intIdNegocio);
        }

        protected void grdCanibalizacionListado_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListarCab();
        }


        protected void btnPopAceptar_Click(object sender, EventArgs e)
        {

            this.Anular();

        }

        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            this.ListarCab();
        }

        protected void btnEnviar_Click(object sender, EventArgs e)
        {
            this.SolicitudAprobacion();
        }

        protected void btnAprobar_Click(object sender, EventArgs e)
        {
            this.AprobarSolicitud();
        }

        protected void btnSolicitar_Click(object sender, EventArgs e)
        {
            int intIndex = grdCanibalizacionListado.FocusedRowIndex;
            if (intIndex == -1) {
                lblmsj.Text = "Seleccione un registro";
                popupmsj.ShowOnPageLoad = true;
                return;
            }
           int intIdEstado=Convert.ToInt32(grdCanibalizacionListado.GetRowValues(intIndex, "ID_ESTADO"));
           if (intIdEstado != 147)
           {
               lblmsj.Text = "No puede solicitar Aprobación El estado no es Pendiente";
               popupmsj.ShowOnPageLoad = true;
               return;
           }
           else {
               PopupCorreo.ShowOnPageLoad = true;           
           }
        }

        protected void grdCanibalizacionListadoDet_BeforePerformDataSelect(object sender, EventArgs e)
        {
            Session["ID_LOG_CANIBALIZACION_CAB"] = (sender as ASPxGridView).GetMasterRowKeyValue();
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            int intIndex = grdCanibalizacionListado.FocusedRowIndex;
            if (intIndex == -1) {
                lblmsj.Text = "Seleccione un registro a modificar";
                popupmsj.ShowOnPageLoad = true;
                return;           
            }

            int intIdCab=Convert.ToInt32(grdCanibalizacionListado.GetRowValues(intIndex,"ID_LOG_CANIBALIZACION_CAB"));
            Session["idCAb"] = intIdCab;
            Session["Operacion"] = "M";
            Response.Redirect("~/Canibalizacion/wFrmCanibalizacionActualizar.aspx?id="+intIdNegocio);
        }

        protected void btnImprimir_Click(object sender, EventArgs e)
        {
            pcImprimir.ShowOnPageLoad = true;
            int id_estado_armado = cboEstado.Value==null?0:Convert.ToInt32(cboEstado.Value);
            this.rpvImprimir.ProcessingMode = ProcessingMode.Remote;
            this.rpvImprimir.ShowCredentialPrompts = true;
            this.rpvImprimir.ShowExportControls = true;
            this.rpvImprimir.ServerReport.ReportServerCredentials = new RSCredentials();
            this.rpvImprimir.ServerReport.ReportServerUrl =new Uri(ConfigurationManager.AppSettings[DatosConfiguracion.RsServer]);
            this.rpvImprimir.ServerReport.ReportPath = "/SAP_Repuestos/rsCanibalizacionGeneral";
            ReportParameter parameter = new ReportParameter("ID_ESTADO_ARMADO", id_estado_armado.ToString());
            this.rpvImprimir.ServerReport.SetParameters(parameter);
            rpvImprimir.ServerReport.Refresh();
        }




        [Serializable]
        public sealed class RSCredentials : IReportServerCredentials
        {
            public WindowsIdentity ImpersonationUser
            {
                get { return null; }
            }

            public ICredentials NetworkCredentials
            {
                get
                {
                    string userName = ConfigurationManager.AppSettings[DatosConfiguracion.RsUser];
                    string password = ConfigurationManager.AppSettings[DatosConfiguracion.RsPassword];
                    string domain = ConfigurationManager.AppSettings[DatosConfiguracion.RsDomain];

                    return new NetworkCredential(userName, password, domain);
                }
            }

            public bool GetFormsCredentials(out Cookie authCookie, out String userName, out String password,
                out String authority)
            {
                authCookie = null;
                userName = null;
                password = null;
                authority = null;
                return false;
            }
        }

        protected void grdCanibalizacionListadoDet_HtmlRowPrepared(object sender, ASPxGridViewTableRowEventArgs e)
        {
            if (e.RowType != GridViewRowType.Data) return;
            int ind_estado = e.GetValue("ES_ANULADO") == null ? 0 : Convert.ToInt32(e.GetValue("ES_ANULADO"));
            if (ind_estado == 1)
            {
                e.Row.BackColor = Color.FromArgb(0xC2, 0xFC, 0x45, 0x45);
                e.Row.ForeColor = Color.White;
            }
        }
    }
}